package com.killLog.service.impl;

import com.killLog.dao.RoleDao;
import com.killLog.dto.MenuDto;
import com.killLog.model.Module;
import com.killLog.service.RoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;

@Service
public class RoleServiceImpl implements RoleService {
    /**
    依赖注入
    */
    @Autowired
    private RoleDao roleDao;
    /**
     * @Description: 获取指定角色的权限列表
     * @Param ro_id 
     * @return com.killLog.common.Result
    */
    @Override
    public List<MenuDto> getRoleModuleList(Integer ro_id) {
        List<Module> moduleList = roleDao.findRoleModuleList(ro_id);
        List<MenuDto> mainList = new ArrayList<>();//主菜单的集合
        MenuDto currentMain = null;//当前主菜单

        for(Module fun : moduleList){
            if(currentMain == null || !currentMain.getMenuId().equals(fun.getP_id())){
                //当前主菜单不存在或者当前主菜单的编号与fun对象中的主菜单编号不一致，则生成新的主菜单，并给当前主菜单赋值
                currentMain = new MenuDto();
                currentMain.setMenuId(fun.getP_id());//设置主菜单编号
                currentMain.setMenuName(fun.getP_name());//设置主菜单名称
                currentMain.setSubMenuList(new ArrayList<MenuDto>());//设置子菜单集合

                mainList.add(currentMain);//将主菜单放入主菜单集合中
            }

            MenuDto sub = new MenuDto();
            sub.setMenuId(fun.getM_id());//设置子菜单编号
            sub.setMenuName(fun.getM_name());//设置子菜单名称
            sub.setMenuUrl(fun.getM_pc_url());//设置子菜单对应的访问地址
            sub.setHas(fun.isHas());

            currentMain.getSubMenuList().add(sub);//将子菜单放入主菜单集合中
        }

        return mainList;
    }

    /**
     * @Description: 变更用户角色权限
     * @Param roId 
     * @Param moduleIds 
     * @return void
    */
    @Override
    public void confirmRoleModules(Integer roId, Integer[] moduleIds) {
        //1.先删除指定角色的所有权限
        roleDao.deleteRoleModules(roId);
        //2.判断传入的数组是否为空
        if (moduleIds == null || moduleIds.length == 0) {
            return;
        }
        //3.将前端提交的权限再insert进去
        roleDao.insertRoleModules(roId, moduleIds);
    }
}
